﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Woobao.VO;

namespace Woobao.DAO
{
   public class CampeonatoDAO
    {
   public void Inserir(VOCampeonato obj)
        {
            TBCampeonato cam = ConverterParaBanco(obj);
            using (DBWoobaoEntities banco = new DBWoobaoEntities())
            {
                banco.TBCampeonatoes.Add(cam);
                banco.SaveChanges();
            }
        }

        TBCampeonato ConverterParaBanco(VOCampeonato vo)
        {
            TBCampeonato cam = new TBCampeonato();

            cam.IDCampeonato = vo.Codigo;
            cam.IDStatus = vo.CodigoStatus;
            cam.Nome = vo.Nome;
            cam.NRParticipantes = vo.NumeroParticipantes;
            cam.DTInicio = vo.DtInicio;
            cam.DTFim = vo.DtFinal;

            return cam;
        }

        VOCampeonato ConverterParaVO(TBCampeonato tb)
        {
            VOCampeonato vo = new VOCampeonato();

            vo.Codigo = tb.IDCampeonato;
            vo.CodigoStatus = tb.IDStatus;
            vo.Nome = tb.Nome;
            vo.NumeroParticipantes = tb.NRParticipantes;
            vo.DtInicio = tb.DTInicio;
            vo.DtFinal = tb.DTFim; //Na classe teve que inserir Interrogação para não ser nulo (?)

            return vo;
        }

        public List<VOCampeonato> Consultar(VOCampeonato filtro)
        {
            using (DBWoobaoEntities banco = new DBWoobaoEntities())
            {
                var query = from u in banco.TBCampeonatoes
                            where
                            (u.Nome.Contains(filtro.Nome) || filtro.Nome == null)
                            &&
                            (u.IDCampeonato == filtro.Codigo || filtro.Codigo == 0)
                            &&
                            (u.IDStatus == filtro.CodigoStatus || filtro.CodigoStatus ==0)
                            select u;
                List<TBCampeonato> lista = query.ToList();
                List<VOCampeonato> listaRetorno = new List<VOCampeonato>();
                foreach (var item in lista)
                {
                    listaRetorno.Add(ConverterParaVO(item));
                }
                return listaRetorno;
            }
                        
        }

        public void Atualizar(VOCampeonato obj)
        {
            using (DBWoobaoEntities banco = new DBWoobaoEntities())
            {
                TBCampeonato cam = banco.TBCampeonatoes.Where(q => q.IDCampeonato == obj.Codigo).Single();
                cam.IDCampeonato = obj.Codigo;
                cam.IDStatus = obj.CodigoStatus;
                cam.Nome = obj.Nome;
                cam.NRParticipantes = obj.NumeroParticipantes;
                cam.DTInicio = obj.DtInicio;
                cam.DTFim = obj.DtFinal;

                banco.SaveChanges();
            }
        }

        public void Excluir(int codigo)
        {
            using (DBWoobaoEntities banco = new DBWoobaoEntities())
            {
                TBCampeonato cam = banco.TBCampeonatoes.Where(q => q.IDCampeonato == codigo).Single();
                banco.TBCampeonatoes.Remove(cam);
                banco.SaveChanges();
            }
        }
    }
}
